//package com.ljy.cameralibrary;
//
//import android.Manifest;
//import android.graphics.Bitmap;
//import android.graphics.SurfaceTexture;
//import android.opengl.GLSurfaceView;
//import android.os.Bundle;
//import android.view.View;
//import android.view.WindowManager;
//import android.widget.ImageView;
//import android.widget.LinearLayout;
//
//import androidx.annotation.NonNull;
//import androidx.appcompat.app.AppCompatActivity;
//
//import com.cgfay.filter.glfilter.color.bean.DynamicColor;
//import com.cgfay.filter.glfilter.resource.FilterHelper;
//import com.cgfay.filter.glfilter.resource.MakeupHelper;
//import com.cgfay.filter.glfilter.resource.ResourceHelper;
//import com.cgfay.filter.glfilter.resource.ResourceJsonCodec;
//import com.cgfay.uitls.utils.NotchUtils;
//import com.cgfay.uitls.utils.PermissionUtils;
//import com.cgfay.uitls.utils.StatusBarUtils;
//import com.ljy.cameratest.camera.CameraParam;
//import com.ljy.cameratest.persenter.RecordPresenter;
//import com.ljy.cameratest.renderer.RecordRenderer;
//import com.ljy.cameratest.widget.GLRecordView;
//
//import java.io.File;
//
//public class MainActivity extends AppCompatActivity {
//    private GLRecordView mGLRecordView;
//    private RecordRenderer mRenderer;
//    private RecordPresenter mPresenter;
//    private static final int REQUEST_CODE = 0;
//    private ImageView takePhoto;
//
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
//        checkPermissions();
//        if (PermissionUtils.permissionChecking(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//            initResources();
//        }
//        CameraParam.getInstance().isTakePicture = false;
//        mPresenter = new RecordPresenter(this);
//        mPresenter.setRecordSeconds(15);
//        mRenderer = new RecordRenderer(mPresenter);
//        // 录制预览
//        mGLRecordView = (GLRecordView) findViewById(R.id.gl_record_view);
//        takePhoto = findViewById(R.id.take_photo);
//        mGLRecordView.setEGLContextClientVersion(3);
//        mGLRecordView.setRenderer(mRenderer);
//        mGLRecordView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
//        mGLRecordView.addOnTouchScroller(mTouchScroller);
//        takePhoto.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                takePicture();
//            }
//        });
//        // 判断是否存在刘海屏
//        if (NotchUtils.hasNotchScreen(this)) {
//            View view = findViewById(R.id.view_safety_area);
//            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
//            params.height = StatusBarUtils.getStatusBarHeight(this);
//            view.setLayoutParams(params);
//        }
//
//        showViews();
//    }
//
//    /**
//     * 初始化动态贴纸、滤镜等资源
//     */
//    private void initResources() {
//        new Thread(() -> {
//            ResourceHelper.initAssetsResource(MainActivity.this);
//            FilterHelper.initAssetsFilter(MainActivity.this);
//            MakeupHelper.initAssetsMakeup(MainActivity.this);
//        }).start();
//    }
//
//    private void checkPermissions() {
//        PermissionUtils.requestPermissions(this, new String[]{
//                Manifest.permission.CAMERA,
//                Manifest.permission.WRITE_EXTERNAL_STORAGE,
//                Manifest.permission.RECORD_AUDIO
//        }, REQUEST_CODE);
//    }
//
//    @Override
//    protected void onResume() {
//        super.onResume();
//        handleFullScreen();
//        mGLRecordView.onResume();
//        mPresenter.onResume();
//        mPresenter.setAudioEnable(PermissionUtils.permissionChecking(this, Manifest.permission.RECORD_AUDIO));
//    }
//
//    @Override
//    protected void onPause() {
//        super.onPause();
//        mGLRecordView.onPause();
//        mPresenter.onPause();
//        mRenderer.clear();
//
//    }
//
//    @Override
//    protected void onDestroy() {
//        mPresenter.release();
//        mPresenter = null;
//        super.onDestroy();
//    }
//
//    private void handleFullScreen() {
//        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
//                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
//        // 是否全面屏
//        if (NotchUtils.hasNotchScreen(this)) {
//            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
//            WindowManager.LayoutParams lp = getWindow().getAttributes();
//            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
//            getWindow().setAttributes(lp);
//        }
//    }
//
//    /**
//     * 隐藏控件
//     */
//    public void hidViews() {
//        //        runOnUiThread(() -> {
//        //            if (mRecordSpeedBar != null) {
//        //                mRecordSpeedBar.setVisibility(View.GONE);
//        //            }
//        //            if (mBtnDelete != null) {
//        //                mBtnDelete.setVisibility(View.GONE);
//        //            }
//        //            if (mBtnNext != null) {
//        //                mBtnNext.setVisibility(View.GONE);
//        //            }
//        //            if (mBtnSwitch != null) {
//        //                mBtnSwitch.setVisibility(View.GONE);
//        //            }
//        //        });
//    }
//
//    /**
//     * 显示控件
//     */
//    public void showViews() {
//        //        runOnUiThread(() -> {
//        //            if (mRecordSpeedBar != null) {
//        //                mRecordSpeedBar.setVisibility(View.VISIBLE);
//        //            }
//        //            boolean showEditEnable = mPresenter.getRecordVideoSize() > 0;
//        //            if (mBtnDelete != null) {
//        //                mBtnDelete.setVisibility(showEditEnable ? View.VISIBLE : View.GONE);
//        //            }
//        //            if (mBtnNext != null) {
//        //                mBtnNext.setVisibility(showEditEnable ? View.VISIBLE : View.GONE);
//        //            }
//        //            if (mBtnSwitch != null) {
//        //                mBtnSwitch.setVisibility(View.VISIBLE);
//        //            }
//        //            if (mRecordButton != null) {
//        //                mRecordButton.reset();
//        //            }
//        //        });
//    }
//
//    /**
//     * 设置进度
//     *
//     * @param progress
//     */
//    public void setProgress(float progress) {
//        runOnUiThread(() -> {
//            //            mProgressView.setProgress(progress);
//        });
//    }
//
//    /**
//     * 添加一段进度
//     *
//     * @param progress
//     */
//    public void addProgressSegment(float progress) {
//        runOnUiThread(() -> {
//            //            mProgressView.addProgressSegment(progress);
//        });
//    }
//
//    /**
//     * 删除一段进度
//     */
//    public void deleteProgressSegment() {
//        runOnUiThread(() -> {
//            //            mProgressView.deleteProgressSegment();
//        });
//    }
//
//    /**
//     * 绑定相机输出的SurfaceTexture
//     *
//     * @param surfaceTexture
//     */
//    public void bindSurfaceTexture(@NonNull SurfaceTexture surfaceTexture) {
//        mGLRecordView.queueEvent(() -> mRenderer.bindSurfaceTexture(surfaceTexture));
//    }
//
//    /**
//     * 更新预览纹理大小
//     *
//     * @param width
//     * @param height
//     */
//    public void updateTextureSize(int width, int height) {
//        if (mRenderer != null) {
//            mRenderer.setTextureSize(width, height);
//        }
//    }
//
//    /**
//     * 刷新画面
//     */
//    public void onFrameAvailable() {
//        CameraParam.getInstance().isTakePicture = false;
//        if (mGLRecordView != null) {
//            mGLRecordView.requestRender();
//        }
//    }
//
//    public void takePicture() {
//        CameraParam.getInstance().isTakePicture = true;
//        mGLRecordView.requestRender();
//    }
//
//    // ----------------------------------------- 切换滤镜 -------------------------------------------
//    private int mFilterIndex;
//    private GLRecordView.OnTouchScroller mTouchScroller = new GLRecordView.OnTouchScroller() {
//        @Override
//        public void swipeBack() {
//            mFilterIndex++;
//            if (mFilterIndex >= FilterHelper.getFilterList().size()) {
//                mFilterIndex = 0;
//            }
//            changeDynamicFilter(mFilterIndex);
//        }
//
//        @Override
//        public void swipeFrontal() {
//            mFilterIndex--;
//            if (mFilterIndex < 0) {
//                int count = FilterHelper.getFilterList().size();
//                mFilterIndex = count > 0 ? count - 1 : 0;
//            }
//            changeDynamicFilter(mFilterIndex);
//        }
//
//        @Override
//        public void swipeUpper(boolean startInLeft, float distance) {
//
//        }
//
//        @Override
//        public void swipeDown(boolean startInLeft, float distance) {
//
//        }
//    };
//
//    /**
//     * 切换动态滤镜
//     *
//     * @param filterIndex
//     */
//    public void changeDynamicFilter(int filterIndex) {
//        if (mGLRecordView != null) {
//            mGLRecordView.queueEvent(() -> {
//                String folderPath = FilterHelper.getFilterDirectory(this) + File.separator +
//                        FilterHelper.getFilterList().get(filterIndex).unzipFolder;
//                DynamicColor color = null;
//                if (!FilterHelper.getFilterList().get(filterIndex).unzipFolder.equalsIgnoreCase("none")) {
//                    try {
//                        color = ResourceJsonCodec.decodeFilterData(folderPath);
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                }
//                mRenderer.changeDynamicFilter(MainActivity.this, color);
//            });
//        }
//    }
//
//    public void getPic(Bitmap bitmap) {
//        takePhoto.setImageBitmap(bitmap);
//
//    }
//}
